﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.OleDb;
using System.IO;
using System.Data.SqlClient;

namespace MikroTransfer
{
    public partial class frmHavaleAktarim : XtraForm
    {
        private Dictionary<int, Banka> _bankalar = new Dictionary<int, Banka>();
        GarantiBankasi _garanti;

        public frmHavaleAktarim()
        {
            InitializeComponent();
        }

        private DataTable ExcellToDataTable(FileInfo xlsFile)
        {
            return ExcellToDataTable(xlsFile, false);
        }
        private DataTable ExcellToDataTable(FileInfo xlsFile, bool firsRowCol)
        {
            DataTable dt = new DataTable();
            using (OleDbConnection connection = new System.Data.OleDb.OleDbConnection())
            {
                if (System.IO.Path.GetExtension(xlsFile.Name) == ".xlsx")
                {
                    if (firsRowCol)
                    {
                        connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + xlsFile.FullName + ";Extended Properties='Excel 12.0;IMEX=1;HDR=No'";
                    }
                    else
                    {
                        connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + xlsFile.FullName + ";Extended Properties='Excel 12.0;IMEX=1;'";
                    }
                }
                else
                    if (firsRowCol)
                    {
                        connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsFile.FullName + ";Extended Properties='Excel 8.0;IMEX=1;HDR=No'";
                    }
                    else
                    {
                        connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsFile.FullName + ";Extended Properties='Excel 8.0;IMEX=1;'";
                    }

                connection.Open();

                DataTable dte = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string tblName = dte.Rows[0].ItemArray[2].ToString();
                using (OleDbDataAdapter dataAdapter1 = new OleDbDataAdapter(string.Format("select * from [{0}]", tblName), connection))
                {
                    dataAdapter1.Fill(dt);
                    if (dt.Rows.Count == 0)
                    {
                        tblName = dte.Rows[1].ItemArray[2].ToString();
                        dataAdapter1.SelectCommand.CommandText = string.Format("select * from [{0}]", tblName);
                        dataAdapter1.Fill(dt);
                    }
                }
            }
            return dt;
        }

        private void frmHavaleAktarim_Load(object sender, EventArgs e)
        {
            cmbIslem.Properties.Items.Add("AKBANK");
            cmbIslem.Properties.Items.Add("AKBANK DİJİTAL");
            cmbIslem.Properties.Items.Add("BANK ASYA");
            cmbIslem.Properties.Items.Add("FİNANSBANK");
            cmbIslem.Properties.Items.Add("HSBC BANK");
            cmbIslem.Properties.Items.Add("İŞ BANKI");
            cmbIslem.Properties.Items.Add("TEB");
            cmbIslem.Properties.Items.Add("YKB");
            cmbIslem.Properties.Items.Add("YKB DİJİTAL");
            cmbIslem.Properties.Items.Add("GARANTİ BANKASI");
            cmbIslem.Properties.Items.Add("TEB-FORTİS");

            if (File.Exists(Application.StartupPath + "\\banka_eslestirme.txt"))
            {
                using (StreamReader sr = new StreamReader(Application.StartupPath + "\\banka_eslestirme.txt"))
                {
                    while (sr.Peek() > -1)
                    {
                        string[] fields = sr.ReadLine().Split(';');
                        _bankalar.Add(Cevir.Parse<int>(fields[0]), new Banka()
                        {
                            No = Cevir.Parse<int>(fields[0]),
                            KasaKodu = fields[2],
                            BankaKodu = fields[3],
                            MerkezBankaKodu = fields[4],
                            MasrafCariKodu = fields[5],
                            MerkezBankaSrmKodu = fields[6],
                            AciklamaKosulu = fields[7]
                        });
                    }
                    sr.Close();
                }
            }

            if (File.Exists(Application.StartupPath + "\\garanti_banka_eslestirme.txt"))
            {
                using (StreamReader sr = new StreamReader(Application.StartupPath + "\\garanti_banka_eslestirme.txt"))
                {
                    while (sr.Peek() > -1)
                    {
                        string[] fields = sr.ReadLine().Split(';');
                        _garanti = new GarantiBankasi()
                        {
                            BankaKodu = fields[0],
                            KasaKodu = fields[1],
                            MasrafKodu = fields[2],
                            KasaNakitiKasaKodu = fields[3],
                            MaasOdemesiMasrafKodu = fields[4],
                            AvansOdemesiMasrafKodu = fields[5],
                            IntHavaleBankaKodu = fields[6],
                            IntHavaleSrmKodu = fields[7]
                        };
                    }
                    sr.Close();
                }
            }
        }

        private void txtDosya_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.FileName = "";
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtDosya.Text = dlg.FileName;
            }
        }

        #region Exel Aktarımları

        /// <summary>
        /// Akbank Normal
        /// </summary>
        /// <param name="dt"></param>
        private void AkbankNormal(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[1].KasaKodu;
            string bankaKodu = _bankalar[1].BankaKodu;
            bool basla = false;
            decimal eklenecekTutar = 0;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][3]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][1]).IndexOf('-') > -1)
                    {
                        if (hr.Aciklama.IndexOf(_bankalar[1].AciklamaKosulu) > -1)
                        {
                            hr.GelenHavale = false;
                            hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][1].ToString().Replace("-", "").Replace("+", "").Replace('.', ',').Replace("TL", ""));
                            hr.DovizCinsi = "TL";//Cevir.Parse<string>(dt.Rows[i][3]);
                            hr.HesapTipi = HesapTipi.Masraf;
                            hr.KarsiHesap = _bankalar[1].MasrafCariKodu;
                            hr.AnaHesap = bankaKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hareket.Add(hr);
                        }
                        else
                        {
                            hr.GelenHavale = false;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[1].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[1].MerkezBankaSrmKodu;
                            hr.HesapTipi = HesapTipi.Banka;
                            hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][1].ToString().Replace("-", "").Replace("+", "").Replace('.', ',').Replace("TL", "")) + eklenecekTutar;
                            hr.DovizCinsi = "TL"; //Cevir.Parse<string>(dt.Rows[i][3]);
                            hareket.Add(hr);
                        }
                    }
                    else
                    {
                        if (dt.Rows[i][3].ToString().IndexOf(':') > -1)
                        {
                            eklenecekTutar = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Trim().Replace("TL", "").Split(':')[1].Replace('.', ','));
                            BankaHareket hr2 = new BankaHareket();
                            hr2.GelenHavale = false;
                            hr2.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                            hr2.Meblag = eklenecekTutar;
                            hr2.DovizCinsi = "TL"; //Cevir.Parse<string>(dt.Rows[i][3]);
                            hr2.Aciklama = Cevir.Parse<string>(dt.Rows[i][3]).Trim();
                            hr2.HesapTipi = HesapTipi.Masraf;
                            hr2.KarsiHesap = _bankalar[1].MasrafCariKodu;
                            hr2.AnaHesap = bankaKodu;
                            hr2.SrmKodu = txtSrm.Text;
                            hr2.KarsiSrmKodu = txtSrm.Text;
                            hareket.Add(hr2);
                        }
                        else
                            eklenecekTutar = 0;

                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][1].ToString().Replace("-", "").Replace("+", "").Replace('.', ',').Replace("TL", "")) + eklenecekTutar;
                        hr.DovizCinsi = "TL"; //Cevir.Parse<string>(dt.Rows[i][3]);
                        hareket.Add(hr);
                        eklenecekTutar = 0;
                    }
                }

                if (dt.Rows[i][0].ToString() == "Tarih")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Akbank dijital
        /// </summary>
        /// <param name="dt"></param>
        private void AkbankDijital(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][3]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][1]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (hr.Aciklama.Trim().IndexOf("/0356/000508") > -1)
                        {
                            hr.AnaHesap = _bankalar[2].BankaKodu;
                            hr.KarsiHesap = _bankalar[2].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[2].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = _bankalar[2].BankaKodu;
                            hr.KarsiHesap = _bankalar[2].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Cari;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = _bankalar[2].BankaKodu;
                        hr.KarsiHesap = _bankalar[2].KasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }
                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][1].ToString().Replace("-", "").Replace("+", "").Replace('.', ',').Replace("TL", ""));
                    hr.DovizCinsi = "TL"; //Cevir.Parse<string>(dt.Rows[i][3]);

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString() == "Tarih")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// tamamlandı kontrol edildi
        /// </summary>
        /// <param name="dt"></param>
        private void BankAsya(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[3].KasaKodu;
            string bankaKodu = _bankalar[3].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][1]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][4]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][6]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (Cevir.Parse<string>(dt.Rows[i][5]).Trim() == "İNTERNET")
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[3].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[3].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[3].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][6].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                    hr.DovizCinsi = "";

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().Trim() == "Hareket Tipi")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Tamamlandı kontrol edilmedi
        /// </summary>
        /// <param name="dt"></param>
        private void FinansBank(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[4].KasaKodu;
            string bankaKodu = _bankalar[4].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][2]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][3]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][5]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (Cevir.Parse<string>(dt.Rows[i][3]).Trim().IndexOf(_bankalar[4].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[4].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[4].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[4].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][5].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                    hr.DovizCinsi = "";

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().Trim() == "HESAPNO")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Tamamlandı test edildi
        /// </summary>
        /// <param name="dt"></param>
        private void Hsbc(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[5].KasaKodu;
            string bankaKodu = _bankalar[5].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = TarihDuzelt(dt.Rows[i][0].ToString());
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][2]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (Cevir.Parse<string>(dt.Rows[i][1]).Trim().IndexOf(_bankalar[5].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[5].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[5].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[5].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][2].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                    hr.DovizCinsi = "";

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().Trim() == "İşlem Tarihi")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }

        /// <summary>
        /// Tamamlandı Test Edilecek.
        /// </summary>
        /// <param name="dt"></param>
        private void IsBank(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[6].KasaKodu;
            string bankaKodu = _bankalar[6].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][3]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][8]).Trim();

                    if (Cevir.Parse<decimal>(dt.Rows[i][5]) > 0) //BORÇ
                    {
                        hr.GelenHavale = false;
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][5].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));

                        if (Cevir.Parse<string>(dt.Rows[i][3]).Trim().IndexOf(_bankalar[6].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[6].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[6].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[6].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else //ALACAK
                    {
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][6].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }


                    hr.DovizCinsi = "";

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().Trim() == "İŞLEM")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        /// <summary>
        /// Tamamlandı test edildi
        /// </summary>
        /// <param name="dt"></param>
        private void Teb(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[7].KasaKodu;
            string bankaKodu = _bankalar[7].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][4]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][7]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (Cevir.Parse<string>(dt.Rows[i][4]).Trim().IndexOf(_bankalar[7].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[7].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[7].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[7].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][7].ToString().Replace("-", "").Replace("+", "").Replace('.', ','));
                    hr.DovizCinsi = "";

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().Trim() == "Tarih")
                {
                    basla = true;
                    i++;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Tamamlandı test edildi
        /// </summary>
        /// <param name="dt"></param>
        private void TebFortis(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][2]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][3]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (Cevir.Parse<string>(dt.Rows[i][2]).Trim().IndexOf(_bankalar[11].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = _bankalar[11].BankaKodu;
                            hr.KarsiHesap = _bankalar[11].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[11].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = _bankalar[11].BankaKodu;
                            hr.KarsiHesap = _bankalar[11].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = _bankalar[11].BankaKodu;
                        hr.KarsiHesap = _bankalar[11].KasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace('.', ','));
                    hr.DovizCinsi = "";

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().Trim() == "Tarih")
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private DateTime TarihDuzelt(string tarih)
        {
            string[] dizi = tarih.Trim().Split(' ');
            int day = Cevir.Parse<int>(dizi[0]);
            int month = 1;
            int year = Cevir.Parse<int>(dizi[2].Trim());

            switch (dizi[1].Trim().ToLower())
            {
                case "ocak":
                    month = 1;
                    break;
                case "şubat":
                    month = 2;
                    break;
                case "mart":
                    month = 3;
                    break;
                case "nisan":
                    month = 4;
                    break;
                case "mayıs":
                    month = 5;
                    break;
                case "haziran":
                    month = 6;
                    break;
                case "temmuz":
                    month = 7;
                    break;
                case "ağustos":
                    month = 8;
                    break;
                case "eylül":
                    month = 9;
                    break;
                case "ekim":
                    month = 10;
                    break;
                case "kasım":
                    month = 11;
                    break;
                case "aralık":
                    month = 12;
                    break;
            }
            return new DateTime(year, month, day);
        }

        private string Mid(string deger, int len)
        {
            if (deger.Length > len)
            {
                return deger.Substring(0, len);
            }
            else
            {
                return deger;
            }
        }

        /// <summary>
        /// Tamamlandı Kontrol edildi
        /// </summary>
        /// <param name="dt"></param>
        private void YkbMesrutiyet(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[8].KasaKodu;
            string bankaKodu = _bankalar[8].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][2]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][3]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (hr.Aciklama.Trim().IndexOf(_bankalar[8].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[8].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[8].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[8].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Masraf;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                    hr.DovizCinsi = "";

                    if (hr.Meblag > 0)
                    {
                        hareket.Add(hr);
                    }

                }

                if (dt.Rows[i][0].ToString() == "İşlem Tarihi")
                {
                    basla = true;
                    i++;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Tamamlandı Kontrol edildi
        /// </summary>
        /// <param name="dt"></param>
        private void YkbMigros(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            string kasaKodu = _bankalar[9].KasaKodu;
            string bankaKodu = _bankalar[9].BankaKodu;

            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][2]).Trim();

                    if (Cevir.Parse<string>(dt.Rows[i][3]).IndexOf('-') > -1)
                    {
                        hr.GelenHavale = false;

                        if (hr.Aciklama.Trim().IndexOf(_bankalar[9].AciklamaKosulu) > -1)
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[9].MerkezBankaKodu;
                            hr.SrmKodu = _bankalar[9].MerkezBankaSrmKodu;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Banka;
                        }
                        else
                        {
                            hr.AnaHesap = bankaKodu;
                            hr.KarsiHesap = _bankalar[9].MasrafCariKodu;
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Cari;
                        }
                    }
                    else
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = bankaKodu;
                        hr.KarsiHesap = kasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                    }

                    hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                    hr.DovizCinsi = "";

                    if (hr.Meblag > 0)
                    {
                        hareket.Add(hr);
                    }
                }

                if (dt.Rows[i][0].ToString() == "İşlem Tarihi")
                {
                    basla = true;
                    i++;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Garanti(DataTable dt)
        {
            List<BankaHareket> hareket = new List<BankaHareket>();
            bool basla = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (basla)
                {
                    BankaHareket hr = new BankaHareket();
                    hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                    hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();

                    if (hr.Aciklama.ToLower().IndexOf("kasa nakiti") > -1)
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = _garanti.BankaKodu;
                        hr.KarsiHesap = _garanti.KasaNakitiKasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                    }
                    else if (Cevir.Parse<string>(dt.Rows[i][3]).IndexOf('-') == -1 && hr.Aciklama.ToLower().IndexOf("kasa nakiti") == -1)
                    {
                        hr.GelenHavale = true;
                        hr.AnaHesap = _garanti.BankaKodu;
                        hr.KarsiHesap = _garanti.KasaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                        hr.HesapTipi = HesapTipi.Kasa;
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));

                        if (hr.Aciklama.IndexOf(':') > -1) //açıklamada tutar varsa
                        {
                            decimal eklenecek = Cevir.Parse<decimal>(dt.Rows[i][1].ToString().Split(':')[1].Trim());
                            hr.Meblag += eklenecek;
                            if (eklenecek > 0)
                            {
                                BankaHareket hr2 = new BankaHareket();
                                hr2.GelenHavale = false;
                                hr2.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                                hr2.Meblag = eklenecek;
                                hr2.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();
                                hr2.HesapTipi = HesapTipi.Masraf;
                                hr2.KarsiHesap = _garanti.MasrafKodu;
                                hr2.AnaHesap = _garanti.BankaKodu;
                                hr2.SrmKodu = txtSrm.Text;
                                hr2.KarsiSrmKodu = txtSrm.Text;
                                hareket.Add(hr2);
                            }
                        }
                    }
                    else if (hr.Aciklama.IndexOf("MAAŞ ÖDEMESİ") > -1)
                    {
                        hr.GelenHavale = false;
                        hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                        hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();
                        hr.HesapTipi = HesapTipi.Masraf;
                        hr.KarsiHesap = _garanti.MaasOdemesiMasrafKodu;
                        hr.AnaHesap = _garanti.BankaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                    }
                    else if (hr.Aciklama.IndexOf("AVANS ÖDEMESİ") > -1)
                    {
                        hr.GelenHavale = false;
                        hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                        hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();
                        hr.HesapTipi = HesapTipi.Masraf;
                        hr.KarsiHesap = _garanti.AvansOdemesiMasrafKodu;
                        hr.AnaHesap = _garanti.BankaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                    }
                    else if (hr.Aciklama.IndexOf("POS Ücreti") > -1)
                    {
                        hr.GelenHavale = false;
                        hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                        hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();
                        hr.HesapTipi = HesapTipi.Masraf;
                        hr.KarsiHesap = _garanti.MasrafKodu;
                        hr.AnaHesap = _garanti.BankaKodu;
                        hr.SrmKodu = txtSrm.Text;
                        hr.KarsiSrmKodu = txtSrm.Text;
                    }
                    else if (hr.Aciklama.IndexOf("INT-     HVL") > -1)
                    {
                        hr.GelenHavale = false;
                        hr.Tarih = Cevir.Parse<DateTime>(dt.Rows[i][0]);
                        hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                        hr.Aciklama = Cevir.Parse<string>(dt.Rows[i][1]).Trim();
                        hr.HesapTipi = HesapTipi.Banka;
                        hr.KarsiHesap = _garanti.IntHavaleBankaKodu;
                        hr.AnaHesap = _garanti.BankaKodu;
                        hr.SrmKodu = _garanti.IntHavaleSrmKodu;
                        hr.KarsiSrmKodu = txtSrm.Text;
                    }
                    else
                    {
                        if (Cevir.Parse<string>(dt.Rows[i][3]).IndexOf('-') > -1)
                        {
                            hr.GelenHavale = false;
                            hr.AnaHesap = _garanti.BankaKodu;
                            hr.KarsiHesap = "G99";
                            hr.SrmKodu = txtSrm.Text;
                            hr.KarsiSrmKodu = txtSrm.Text;
                            hr.HesapTipi = HesapTipi.Kasa;
                            hr.Meblag = Cevir.Parse<decimal>(dt.Rows[i][3].ToString().Replace("-", "").Replace("+", "").Replace(".", ""));
                        }
                    }

                    hareket.Add(hr);
                }

                if (dt.Rows[i][0].ToString().IndexOf("Tarih") > -1)
                {
                    basla = true;
                }
            }

            Mikro mikro = new Mikro(Db.Kontur);
            DbSqlServer sql = new DbSqlServer(Db.Kontur);
            SqlTransaction trn = sql.OpenTransaction();

            string Seri = txtSeri.Text;
            int Sira = 1;

            foreach (var trh in (from h in hareket group h by new { h.Tarih, h.GelenHavale } into g select new { g.Key.Tarih, g.Key.GelenHavale }).ToList())
            {
                if (trh.GelenHavale)
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GelenHavale, Seri, trn);
                else
                    Sira = mikro.MaxEvrakNo(EvrakTipleri.GidenHavale, Seri, trn);

                int satir = 0;
                foreach (var item in hareket.Where(x => x.Tarih == trh.Tarih && x.GelenHavale == trh.GelenHavale))
                {
                    mikro.HavaleEkle(item.GelenHavale, trn, item.Tarih, item.AnaHesap, item.HesapTipi, item.KarsiHesap, item.Meblag, "", item.SrmKodu, Seri, Sira, satir, item.KarsiSrmKodu);
                    satir++;
                }
            }

            try
            {
                trn.Commit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        #endregion

        private void btnAktar_Click(object sender, EventArgs e)
        {
            if (cmbIslem.SelectedIndex > -1 && !string.IsNullOrEmpty(txtDosya.Text) && !string.IsNullOrEmpty(txtSeri.Text) && !string.IsNullOrEmpty(txtSrm.Text))
            {
                if (File.Exists(txtDosya.Text))
                {
                    DataTable dt = null;
                    if (cmbIslem.SelectedIndex == 6 || cmbIslem.SelectedIndex == 3 || cmbIslem.SelectedIndex == 10)
                    {
                        dt = ExcellToDataTable(new FileInfo(txtDosya.Text), true);
                    }
                    else
                    {
                        dt = ExcellToDataTable(new FileInfo(txtDosya.Text));
                    }

                    switch (cmbIslem.SelectedIndex)
                    {
                        case 0:
                            AkbankNormal(dt);
                            break;
                        case 1:
                            AkbankDijital(dt);
                            break;
                        case 2:
                            BankAsya(dt);
                            break;
                        case 3:
                            FinansBank(dt);
                            break;
                        case 4:
                            Hsbc(dt);
                            break;
                        case 5:
                            IsBank(dt);
                            break;
                        case 6:
                            Teb(dt);
                            break;
                        case 7:
                            YkbMesrutiyet(dt);
                            break;
                        case 8:
                            YkbMigros(dt);
                            break;
                        case 9:
                            Garanti(dt);
                            break;
                        case 10:
                            TebFortis(dt);
                            break;
                    }

                    MessageBox.Show("Aktarım Tamamlandı !");
                }
            }
        }
    }
}
